//
//  FiveHeadViewController.swift
//  swiftTS
//
//  Created by 航电 on 2020/3/6.
//  Copyright © 2020 航电. All rights reserved.
//

import UIKit

class FiveHeadViewController: UIViewController {

    fileprivate let cellId = "five_header_cell";
    fileprivate lazy var mainTableView:UITableView = {
        let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: screenMainSize.width, height: screenMainSize.height), style: UITableView.Style.grouped);
        tableView.backgroundColor = .white;
        tableView.delegate = self;
        tableView.dataSource = self;
        tableView.register(FiveContentCell.self, forCellReuseIdentifier: cellId);
        tableView.showsVerticalScrollIndicator = false;
        tableView.showsHorizontalScrollIndicator = false;
        return tableView;
    }();
    
    lazy var dataArray:NSMutableArray = {
        var dataArr = NSMutableArray();
        
        let dateFormatter = DateFormatter();
        dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss";
        
        let data1Arr = NSMutableArray();
        let time = dateFormatter.string(from: Date());
    data1Arr.add(["title":"新闻点击展开预览1","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
    data1Arr.add(["title":"新闻点击展开预览2","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"标题一","data":data1Arr]);
       
        let data2Arr = NSMutableArray();
    data2Arr.add(["title":"新闻点击展开预览3","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
    data2Arr.add(["title":"新闻点击展开预览4","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
    data2Arr.add(["title":"新闻点击展开预览5","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"标题二","data":data2Arr]);
       
       let data3Arr = NSMutableArray();
    data3Arr.add(["title":"新闻点击展开预览6","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
       dataArr.add(["title":"标题三","data":data3Arr]);
       
       let data4Arr = NSMutableArray();
    data4Arr.add(["title":"新闻点击展开预览7","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
    data4Arr.add(["title":"新闻点击展开预览8","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
    data4Arr.add(["title":"新闻点击展开预览9","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"标题四","data":data4Arr]);
        
        return dataArr;
    }();
    
    lazy var selectArray:NSMutableArray = {
        var mutArr = NSMutableArray();
        for index in 0 ... self.dataArray.count-1 {
            mutArr.add("0");
        }
        return mutArr;
    }();
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "header展开";
        // Do any additional setup after loading the view.
        self.onCreateUIForView();
    }
    

    //TODO:UI
    fileprivate func onCreateUIForView() {
        self.view.backgroundColor = .white;
        
        self.view.addSubview(self.mainTableView);
    }

    //TODO:Actions
    @objc fileprivate func onClickBtForCell(ctrl:UIControl) {
        let tg = ctrl.tag - 3100;
        if self.selectArray.count > tg {
            var selectData:String = self.selectArray[tg] as! String;
            if selectData == "0" {
                selectData = "1";
            } else {
                selectData = "0";
            }
            self.selectArray.replaceObject(at: tg, with: selectData);
            self.mainTableView.reloadData();
        }
    }
}

extension FiveHeadViewController:UITableViewDelegate,UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.dataArray.count;
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if self.dataArray.count > section {
            let data:Dictionary<String,AnyObject> = self.dataArray[section] as! Dictionary<String,AnyObject>;
            let array:Array<AnyObject> = data["data"] as! Array<AnyObject>;
            
            if self.selectArray.count > section {
                let selectData:String = self.selectArray[section] as! String;
                if selectData == "1" {
                    return 0;
                }
            }
            return array.count;
        }
        return 0;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId) as! FiveContentCell;
        cell.selectionStyle = .none;
        
        if self.dataArray.count > indexPath.section {
            let data:Dictionary<String,AnyObject> = self.dataArray[indexPath.section] as! Dictionary<String,AnyObject>;
            let array:Array<AnyObject> = data["data"] as! Array<AnyObject>;
            
            if array.count > indexPath.row {
                cell.onChangeDataForCell(dic: array[indexPath.row] as! Dictionary<String, AnyObject>,isShow: true);
            }
        }
        
        return cell;
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if self.dataArray.count > indexPath.section {
            let data:Dictionary<String,AnyObject> = self.dataArray[indexPath.section] as! Dictionary<String,AnyObject>;
            let array:Array<AnyObject> = data["data"] as! Array<AnyObject>;
            
            if array.count > indexPath.row {
                return FiveContentCell.onShowHeight(isShow: true,dic: array[indexPath.row] as! Dictionary<String, AnyObject>);
            }
        }
        return 0;
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 50));
        headerView.backgroundColor = .purple;
        
        let titleLb = UILabel(frame: headerView.bounds);
        titleLb.textColor = .white;
        titleLb.textAlignment = .center;
        headerView.addSubview(titleLb);
        
        if self.dataArray.count > section {
            let data:Dictionary<String,AnyObject> = self.dataArray[section] as! Dictionary<String,AnyObject>;
            let titleName:String = data["title"] as! String;
            titleLb.text = titleName;
        }
        
        let ctrl = UIControl(frame: headerView.bounds);
        ctrl.tag = 3100+section;
        ctrl.addTarget(self, action: #selector(onClickBtForCell(ctrl:)), for: .touchUpInside);
        headerView.insertSubview(ctrl, aboveSubview: titleLb);
        
        return headerView;
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50;
    }
}
